var last_leave_domid = "000";
var drag_mode_copy = false;
var task_drag_mode = "move";
// 拖放模式：move/copy/link

//阻止浏览器的默认行为 
function stopDefault(e) {
	//阻止默认浏览器动作(W3C) 
	if (e && e.preventDefault)
		e.preventDefault();
	//IE中阻止函数器默认动作的方式 
	else
		e.returnValue = false;
	return false;
}
//停止事件冒泡
function stopBubble(e) {

	//如果提供了事件对象，则这是一个非IE浏览器 
	if (e && e.stopPropagation)
		//因此它支持W3C的stopPropagation()方法 
		e.stopPropagation();
	else
		//否则，我们需要使用IE的方式来取消事件冒泡 
		window.event.cancelBubble = true;
}

function toggle_drag_mode(){
	drag_mode_copy=!drag_mode_copy;
//	console.log($(event.target));
//	console.log(drag_mode_copy);
	if(drag_mode_copy){
		$("#btn_toggle_drag_mode").addClass("btn-primary")
	}else{
		$("#btn_toggle_drag_mode").removeClass("btn-primary")
	};
}

function change_drag_mode(mode='move'){
	task_drag_mode = mode;
	// $(e.target).addClass("active");
}

//调整任务顺序
function change_task_sort(taskid, newsort) {
	$.post("/index.php/task/change", {
			id: taskid,
			parm1: 'sort',
			value1: newsort
		},
		function (dataGet, status) {
			if (dataGet) {
				//						layer.msg('服务端修改成功！',{time: 2000});
				console.log("排序调整成功！");
			} else {
				console.log("服务器修改失败！\n" + dataGet.status + dataGet.message);
			}
		}, "json");
}

//改变任务的active状态
function change_task_active(active, domid) {
	if (domid == "") {
		domid = current_opt_dom_id;
	}
	var taskid = $("#" + domid).attr("data-taskid");
	var parentid = $("#" + domid).attr("data-parent");
	$.post("/index.php/task/change", {
			id: taskid,
			parm1: 'active',
			value1: active
		},
		function (dataGet, status) {
			if (dataGet) {
				//						layer.msg('服务端修改成功！',{time: 2000});
				if (active == 1) {
					$("#" + domid).appendTo($("#active_area"));
				} else {
					$("#" + domid).appendTo($("#alltask_view,#simple_view").find("div.task[data-taskid=" + parentid + "]"));
				}
				hide_toolbar();
				console.log("调整成功！");
			} else {
				console.log("服务器修改失败！\n" + dataGet.status + dataGet.message);
			}
		}, "json");
}


//在任务开始被拖放时，设置传递的参数，将任务节点dom的id放进参数里
function task_dragstart(ev) {
	if (drag_type == "calendar") {

	} else {
		ev.dataTransfer.setData("Text", ev.target.id);
		//            ev.dataTransfer.addElement("source_parent_domid",ev.target.parentNode.id);
		// console.log(ev);
	}
	stopBubble(ev);
	//停止冒泡，否则会根据所处的dom，依次触发上级dom的事件
}


//被拖放置的目标区域是何种区域属性，决定了拖放后的行为，因此，可统一为特殊的目标区域设置“拖放目标区”属性data-dragdropTargetAreaType
//但不够通用，索性设置“区域类型”属性data-areaType，还可用于其它时候。
//考虑到这些区域通常都设置了id，用id标识不同区域就可了，只需将这些dom都添加类area，以标识其为区域
function task_drop(ev) {
			console.log("task_drop()函数被调用");
			console.log(ev);
			console.log(ev.dataTransfer);



	var move_domid, move_taskid, source_parent_domid, source_area_domid;
	var target_parent_domid, target_parent_taskid, target_area_domid, target_parent_nodetype;

	stopDefault(ev);

	//ev.stopPropagation();
	stopBubble(ev);

	$("div.task.task_drag_over").removeClass('task_drag_over');
	// $("#drag_seat").hide().appendTo("#904");
	
	move_domid = ev.dataTransfer.getData("Text");
	move_taskid = $("#" + move_domid).attr("data-taskid");
	source_parent_domid = $("#" + move_domid).parent().attr("id");
	source_area_domid = $("#" + move_domid).closest('.area').attr("id");
	
	console.log(move_domid);
	console.log(move_taskid);
	console.log(source_area_domid);
	console.log(source_parent_domid);

	target_parent_domid = $(ev.target).closest('div.task').attr('id');
	target_parent_taskid = $("#" + target_parent_domid).attr("data-taskid");
	target_parent_nodetype = $("#" + target_parent_domid).attr("data-nodetype");
	target_area_domid = $("#" + target_parent_domid).closest('.area').attr("id");
	//        target_parent_areaType=$("#"+target_parent_domid).attr("data-areatype");

	//        console.log("drop leave"+last_leave_domid);
	//		console.log('被移的：'+move_taskid+'移到'+target_parent_taskid);


	// 下面为拖放图片上传的代码
		// ev.preventDefault(); //取消默认浏览器拖拽效果
		var fileList = ev.dataTransfer.files; //获取文件对象
		console.log(fileList);
		//检测是否是拖拽文件到页面的操作
		if (fileList.length > 0) {//如果有文件上传
			//检测文件是不是图片
			if (fileList[0].type.indexOf('image') === -1) {
				alert("您拖的不是图片！");
				return false;
			}
			//拖拉图片到浏览器，可以实现预览功能
			var img = window.webkitURL.createObjectURL(fileList[0]);
			var filename = fileList[0].name; //图片名称
			var filetype = filename.split('.').pop();
			var filesize = Math.floor((fileList[0].size) / 1024);
			if (filesize > 5000) {
				alert("上传大小不能超过500K.");
				return false;
			}
			//alert(filesize);
			var str = "![](" + img + ")<p>图片名称：" + filename + "</p><p>大小：" + filesize + "KB</p>";
			$("#preview").html(str);

			//上传
			xhr = new XMLHttpRequest();
			xhr.open("post", "index.php/upload/img", true);
			xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
			var fd = new FormData();
			fd.append('mypic', fileList[0]);
			fd.append('taskid',target_parent_taskid);
			xhr.send(fd);

			$.post("/index.php/task/change", {
				id: target_parent_taskid,
				parm1: 'photo',
				// value1: "/_uploads/img/" + filename,//存服务器本地的地址
				value1: "http://img.thinktodo.cn/" + target_parent_taskid + "." + filetype
			},
				function (dataGet, status) {
					$(".task[data-taskid=" + target_parent_taskid + "]").children('a.task_photo_icon').attr(
						{
							'href': '###',
							// 'data-url': "/_uploads/img/" + filename,//存服务器本地的地址
							'data-url': "http://img.thinktodo.cn/" + target_parent_taskid + "." + filetype,
							'title': "图片"
						}
					).html('<i class="fa fa-photo"></i>').end().children('img.task_photo').attr(
						{
							'src':"http://img.thinktodo.cn/" + target_parent_taskid + "." + filetype,
						}
					);
				},"json");
			return;
		}

	switch(source_area_domid){
		case 'calendar_view'://如果任务来自日历视图,取消该任务的日程
			stopBubble(ev);
			$.post("/index.php/task/set_parm_null", {
				id: move_taskid,
				parm1: 'start_date'
				},
				function (dataGet, status) {
					if (dataGet) {
						layer.msg("任务" + move_taskid + "将被从日程表中移除。", {time: 2000});
					$('#calendar_view .task[data-taskid="' + move_taskid + '"]').remove();
					$(".task[data-taskid=" + move_taskid + "]").children('span.start_date').text("");
					} else {
						alert("服务器修改失败，返回拖动前！\n" + dataGet.status + dataGet.message);
					}
				}, "json");
			return; //取消拖放
		case 'active_area':
			
			break;
		case '909':
			
		default:
	}

	switch(source_parent_domid){
		case 'active_area':
			//恢复任务的“活动”字段
			change_task_active(0, move_domid);
			break;
		case '909':
			$.post("/index.php/taskset/del", {
					tid: move_taskid,
					sid: 9
				},
				function (dataGet, status) {
					if (dataGet) {
						if (dataGet.status) {
							layer.msg('已去除，重新刷新即可', {								time: 2000							});
							//							$("#" + move_domid).appendTo("div.task[data-taskid = " + old_parent_taskid + "]");
						} else {
							layer.msg(dataGet.message, {								time: 2000							});
						}
					}
				}, "json");
			return;			
		default:
	}




	switch (target_area_domid) {
		case 'shortcut_view':
			console.log();
			break;
		case 'active_area':
			//任务被新拖进“关注”列表
			//				if(target_parent_domid=='active_area'){
			//设置任务的''字段
			change_task_active(1, move_domid);
			//				$("#"+move_domid).appendTo("#"+target_parent_domid);
			$("#" + move_domid).insertAfter("#active_area>.head_end");
			expend_icon_status();
			return;
		case 'shadow_view':
			console.log("shadow_view");
			//拖进行影子视图，来新建一个副本任务
			
			$.post("/index.php/task/shadow",{
				title: $("#"+move_domid+">.task_title").text(),
				parent: 7,
				source_id:move_taskid
			},
			function (dataGet, status) {
				if (dataGet) {
					if (dataGet.status) {
									//复制一个副本dom，放置在任务集里
						$("#"+move_domid).clone().attr("data-taskid",dataGet.data.newid).attr("id",unique_dom_id++).attr("data-internal_link",move_taskid).addClass("copy").appendTo("#"+target_parent_domid)
							.children('a.task_internal_link').attr({
								'href': '###',
								'data-internal_link': move_taskid,
								'title': "关联到其它任务"
							}).html('<i class="fa fa-share-square" onclick="position_task_id(' + move_taskid + ')"></i>').end().find("div.task").remove();
						
//						$(".task[data-taskid=" + dataGet.data.newid + "]").
						
					} else {
						layer.msg(dataGet.message, {
							time: 2000
						});
					}
				}
			}, "json");
			return;

		default:

	}



	if ($('#' + move_domid).find('#' + target_parent_domid).length > 0) { //如果目标DOM为被移动DOM的子节点
		layer.msg('不能将任务移到子它自己的子任务下！', {
			time: 2000
		}); //不能将父节点移到子节点下
		return;
	}

	if (move_taskid == target_parent_taskid) { //也不能将节点移到自身节点
		return;
	}

	if (source_parent_domid == target_parent_domid) { //如果目标dom就是原来的父dom，则进行排序操作
		//console.log("相同的父对象");
		//console.log("last leave"+last_leave_domid);
		//			console.log(ev);
		//			console.log($("#"+last_leave_domid).offset().top);
		//			console.log($("#"+last_leave_domid).position());
		if (ev.y < $("#" + last_leave_domid).offset().top) {
			$("#" + move_domid).insertBefore("#" + last_leave_domid);
			newsort = $("#" + last_leave_domid).attr("data-sort") - 1;
		} else {
			$("#" + move_domid).insertAfter("#" + last_leave_domid);
			newsort = $("#" + last_leave_domid).attr("data-sort") + 1;
		}
		$("#" + move_domid).attr("data-sort", newsort);
		change_task_sort(move_taskid, newsort);
		return;
	}

	//任务被拖进任务集
	if (target_parent_nodetype == 'E') {
		console.log(move_taskid + "被拖进任务集" + target_parent_taskid);
		//            taskset_add(select_task_id,target_parent_taskid);
		//插入一个任务集关联关系
		$.post("/index.php/taskset/insert", {
				tid: move_taskid,
				sid: target_parent_taskid
			},
			function (dataGet, status) {
				if (dataGet) {
					if (dataGet.status) {
						//复制一个副本dom，放置在任务集里
						//                            $("#"+move_domid).clone().attr("id",dataGet.data.newid).addClass("copy").attr("data-nodetype","C").appendTo("#"+target_parent_domid);
						//不复制，直接移动
						$("#" + move_domid).appendTo("#" + target_parent_domid);
					} else {
						layer.msg(dataGet.message, {
							time: 2000
						});
					}
				}
			}, "json");

		return;
	}

	//如果目标是个副本任务
	if (target_parent_nodetype == 'C') {
		layer.msg('不能将任务移到向副本任务！', {
			time: 2000
		}); //不能
		return;
	}


	// if(drag_mode_copy){
	// if(task_drag_mode=='linkin'){
	switch(task_drag_mode){
		case 'linkin':
			$.post("/index.php/task/shadow",{
					title: $("#"+move_domid+">.task_title").text(),
					parent: target_parent_taskid,
					source_id:move_taskid
				},function (dataGet, status) {
					if (dataGet) {
						if (dataGet.status) {
										//复制一个副本dom，放置在任务集里
							$("#"+move_domid).clone().attr("data-taskid",dataGet.data.newid).attr("id",unique_dom_id++).attr("data-internal_link",move_taskid).appendTo("#"+target_parent_domid)
								.children('a.task_internal_link').attr({
									'href': '###',
									'data-internal_link': move_taskid,
									'title': "关联到其它任务"
								}).html('<i class="fa fa-share-square" onclick="position_task_id(' + move_taskid + ')"></i>').end().find("div.task").remove();				
						} else {
							layer.msg(dataGet.message, {	time: 2000		});
						}
					}
				}, "json");
				return;
			break;
		case 'move':
			//		默认将任务移动到新的父任务下
			$.post("/index.php/task/change_parent", {
					'taskid': move_taskid,
					'new_parent': target_parent_taskid
				},
				function (resultData, status) {
					if(play_wave){
						var myAudio=document.getElementById("pao");
						myAudio.play();
					}
					$("#" + move_domid).appendTo("#" + target_parent_domid);
					expend_icon_status();

					if ($('#' + target_parent_domid).find('#' + last_leave_domid).length > 0) { //如果最后一个经过的任务是目标父任务的子任务，则附带进行排序操作。
						if (ev.y < $("#" + last_leave_domid).offset().top) {
							$("#" + move_domid).insertBefore("#" + last_leave_domid);
							newsort = $("#" + last_leave_domid).attr("data-sort") - 1;
							$("#" + move_domid).attr("data-sort", newsort);
							change_task_sort(move_taskid, newsort);
						} else {
							$("#" + move_domid).insertAfter("#" + last_leave_domid);
							newsort = $("#" + last_leave_domid).attr("data-sort") + 1;
							$("#" + move_domid).attr("data-sort", newsort);
							change_task_sort(move_taskid, newsort);
						}
					}
				}, "json");
			break;
		case 'linkto':
			$.post("/index.php/task/change", {
				id: move_taskid,
				parm1: 'internal_link',
				value1: target_parent_taskid
			},
				function (dataGet, status) {
					$(".task[data-taskid=" + move_taskid + "]").children('a.task_internal_link').attr({
						'href': '###',
						'data-internal_link': target_parent_taskid,
						'title': "关联到其它任务"
					}).html('<i class="fa fa-share-square" onclick="position_task_id(' + target_parent_taskid + ')"></i>');

				},"json");
			break;
		default:

	}




}

//任务拖过空白区时
function dragover_content_area(ev) {
	stopDefault(ev);
}


//任务被拖出视图区，放置在页面内容（即空白区）
function drop_on_content_area(ev) {
	stopDefault(ev);
	var move_taskid, move_domid, source_area;

	//		$("div.task.task_drag_over").removeClass('task_drag_over');

	move_domid = ev.dataTransfer.getData("Text");
	//		console.log('move_domid:'+move_domid);
	move_taskid = $("#" + move_domid).attr("data-taskid");
	source_area = $("#" + move_domid).closest('.area').attr("id");

	//		console.log('source_area:'+source_area);

	//		if(move_domid.substring(0,2)=='ct'){
	if (source_area == 'calendar_view') { //如果任务来自日历视图,取消该任务的日程
		stopBubble(ev);
		$.post("/index.php/task/set_parm_null", {
				id: move_taskid,
				parm1: 'start_date'
			},
			function (dataGet, status) {
				//					alert(dataGet.status+dataGet.message);
				if (dataGet) {
					//							$("#task"+event.id).children('a.task_date').attr('title',date);
					layer.msg("任务" + move_taskid + "将被日程表中移除。", {
						time: 2000
					});
					$('#calendar_view .task[data-taskid="' + move_taskid + '"]').remove();
					$(".task[data-taskid=" + move_taskid + "]").children('span.start_date').text("");
				} else {
					alert("服务器修改失败，返回拖动前！\n" + dataGet.status + dataGet.message);
				}
			}, "json");
		return; //取消拖放
	}

}



$(document).ready(function () {

	var task_drag_leave_view;
	var task_drag_enter_view;
	$("#simple_view,#alltask_view,#taskset_view,#recent_view,#shadow_view,#urlbook_view").on('dragleave','div.task',  function (e) {
	// $(".view_container").on('dragleave','div.task',  function (e) {	
	event = e || event; //为兼容firefox的事件模型
		//			console.log($(event.target));
		last_leave_domid = $(event.target).closest('div.task').removeClass('task_drag_over').attr('id');
		stopDefault(e);
		
		//			$(event.target).closest('div.task').css('padding','40px;');
		//			console.log("任务被拖离"+last_leave_domid);
		return false;
	});
	$("#simple_view,#alltask_view,#taskset_view,#recent_view,#shadow_view,#urlbook_view").on('dragenter','div.task',  function (e) {
		// $(".view_container").on('dragenter','div.task',  function (e) {	
		event = e || event; //为兼容firefox的事件模型
		//			console.log($(event.target));
		$(event.target).closest('div.task').addClass('task_drag_over');
		
		//以下是本想实现在拖动时目标对象时，显示一个占位DOM，但显示的位置有时并不正确
//		   	$("#drag_seat").show();
//			$(event.target).closest('div.task').append($("#drag_seat"));

		
		stopDefault(e);
		return false;
	});
	$("#simple_view,#alltask_view,#taskset_view,#recent_view,#shadow_view,#urlbook_view").on('dragover','div.task',  function (e) {
		event = e || event; //为兼容firefox的事件模型
		$(event.target).closest('div.task').addClass('task_drag_over');
		
		//以下是本想实现在拖动时目标对象时，显示一个占位DOM，但显示的位置有时并不正确
		/*
		if (event.y < $("#" + last_leave_domid).offset().top) {
			$("#drag_seat").show().insertBefore("#" + last_leave_domid);
		} else {
			$("#drag_seat").show().insertAfter("#" + last_leave_domid);
		}
		*/
		
		stopDefault(event);
		return false;
	});

	//以下侦听原不起作用，主要是无法传递来自drag的参数event.dataTransfer.getData，传递的事件不是DragEvent，是普通事件，原因找到在event=e||event一句，event是DragEvent事件，e不是，但是又有值，将e值赋给event后导致无效。
//	$("#simple_view,#alltask_view,#taskset_view,#recent_view,#shadow_view").delegate('div.task', 'drop', function (e) {
	$("#simple_view,#alltask_view,#taskset_view,#recent_view,#shadow_view,#urlbook_view").on( 'drop','div.task', function (e) {
		var event1;
		var move_domid;
		event1 = e || event; //为兼容firefox的事件模型
		console.log("drop侦听函数在起作用");
		console.log(event1);
		console.log(event);
		console.log(e);
		console.log(e.originalEvent);
		stopBubble(event);
//		task_drop(event);原传递event,但在360的极速模式下可用，在chrome中因不是DragEvent对象，不能用
		task_drop(e.originalEvent);
		stopDefault(event);
		return false;
	});

	//设置拖放到快捷方式的行为，还没写好
	$("#shortcut_view").on('drop','div.shortcut',  function (e) {
		var event1;
		var move_domid;
		event1 = e || event; //为兼容firefox的事件模型
		//			console.log("drop侦听函数在起作用");
		//			console.log(event1);
		//			console.log(event);
		//			console.log(e);
		stopBubble(event);
		task_drop(event);
		//		console.log("task_drop()函数被调用");
		//		console.log(ev);
		var move_domid, move_taskid, source_parent_domid, source_area_domid;
		var target_parent_domid, target_parent_taskid, target_area_domid, target_parent_nodetype;

		$("div.task.task_drag_over").removeClass('task_drag_over');

		move_domid = ev.dataTransfer.getData("Text");
		move_taskid = $("#" + move_domid).attr("data-taskid");
		source_parent_domid = $("#" + move_domid).parent().attr("id");
		source_area_domid = $("#" + move_domid).closest('.area').attr("id");
		//		默认将任务移动到新的父任务下
		$.post("/index.php/task/change_parent", {
				'taskid': move_taskid,
				'new_parent': target_parent_taskid
			},
			function (resultData, status) {
				$("#" + move_domid).appendTo("#" + target_parent_domid);
				expend_icon_status();

				if ($('#' + target_parent_domid).find('#' + last_leave_domid).length > 0) { //如果最后一个经过的任务是目标父任务的子任务，则附带进行排序操作。
					if (ev.y < $("#" + last_leave_domid).offset().top) {
						$("#" + move_domid).insertBefore("#" + last_leave_domid);
						newsort = $("#" + last_leave_domid).attr("data-sort") - 1;
						$("#" + move_domid).attr("data-sort", newsort);
						change_task_sort(move_taskid, newsort);
					} else {
						$("#" + move_domid).insertAfter("#" + last_leave_domid);
						newsort = $("#" + last_leave_domid).attr("data-sort") + 1;
						$("#" + move_domid).attr("data-sort", newsort);
						change_task_sort(move_taskid, newsort);
					}
				}
			}, "json");

		stopDefault(event);

		//ev.stopPropagation();
		stopBubble(ev);



		stopDefault(event);
		return false;
	});

	/* 	$("#simple_view,#alltask_view").delegate('div.task','dragstart',function(e){
				event = e||event; //为兼容firefox的事件模型
				if(drag_type=="calendar"){
				}else{
					console.log(event.target);
					console.log(e.target);
					console.log($(event.target));
					// console.log(event.target.id);
					// console.log(e.targer.id);
					var move_id=$(event.target).closest('div.task').attr('id');
					console.log(move_id);
					console.log(event);
					console.log(e);
					event.dataTransfer.setData("Text",move_id);
					e.dataTransfer.setData("Text",move_id);
	//				console.log($(event.target).closest('div.task').attr('id'));
					
	//				event.dataTransfer.setData("Text",$(event.target).closest('div.task').attr('id'));
		//            ev.dataTransfer.addElement("source_parent_domid",ev.target.parentNode.id);
				}
		});	 */

	$("#taskset_view").on('dragover','div.task',  function (e) {
		event = e || event; //为兼容firefox的事件模型
		$(event.target).closest('div.task').addClass('task_drag_over');
		stopDefault(event);

		//            console.log('div.task.taskset_dragover');
		return false;
	});

	/*    
	    $("#taskset_view").delegate('div.task','drop',function(e){
				event = e||event; //为兼容firefox的事件模型
				$(event.target).closest('div.task').addClass('task_drag_over');
				stopDefault(event);
	            console.log('div.task.taskset_drop');
	        
	            var move_domid,move_taskid,source_parent_domid,source_area;
			    var target_parent_domid,target_parent_taskid,target_area;

	            move_domid=event.dataTransfer.getData("Text");
	            move_taskid=$("#"+move_domid).attr("data-taskid");
	            source_area=$("#"+move_domid).closest('.area').attr("id");
	            source_parent_domid=$("#"+move_domid).parent().attr("id");     
	        
	            //任务被拖进任务集视图
	            if(target_area=='taskset_view'){
	                console.log("被拖进任务集视图");
	                console.log(move_taskid+'>'+target_parent_taskid);
	    //            taskset_add(select_task_id,target_parent_taskid);
	                    $.post("/index.php/taskset/insert",
	                      {
	                        tid:select_task_id,
	                        sid:target_parent_taskid
	                      },
	                      function(dataGet,status){
	                        if(dataGet){	
	                            if(dataGet.status){
	                                $("#"+move_domid).clone().attr("id",dataGet.data.newid).addClass("copy").appendTo("#"+target_parent_domid);

	                            }else{
	                                layer.msg(dataGet.message,{time: 2000});
	                            }
	                        }
	                      },"json");

	                return;
	            }        
	          
				return false;
		});	    
	*/

	$("body").on('dragleave','.view_container',  function (e) {
		event = e || event; //为兼容firefox的事件模型
		//			console.log($(event.target));
		//			last_leave_domid=$(event.target).closest('div.task').removeClass('task_drag_over').attr('id');
		task_drag_leave_view = $(event.target).closest('.view_container').attr('id');
		//			console.log("------------任务被拖离视图:"+task_drag_leave_view+'-task-'+last_leave_domid);
		return false;
	});
	$("body").on('dragenter','.view_container',  function (e) {
		event = e || event; //为兼容firefox的事件模型
		//			console.log($(event.target));
		//			$(event.target).closest('div.task').addClass('task_drag_over');
		task_drag_enter_view = $(event.target).closest('.view_container').attr('id');
		//			console.log("------------任务被拖进视图:"+task_drag_enter_view);
		return false;
	});

});
